1.透過佈局 XML 來添加 Fragment
我們來比較一下官方 Sample Code 跟我的實作之間的差異。
在我的電影評論應用程式,
<!-- res/layout/activity_main.xml -->
<fragment
android:id="@+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/bottomNavView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:navGraph="@navigation/navigation" />
使用<fragment>
與<androidx.fragment.app.FragmentContainerView>
的差異,在我有限的認知上是前者目前還是很多人使用。如果改成後者的官方推薦寫法(同時編譯器也會跳出同樣提示),在 navigation controller 這邊,會需要撰寫更多的程式碼來處理[註1]。
經由 activity_main.xml 這樣宣告標籤,讓 Activity 的佈局有一個容器可以置入 Fragment。
官方文件
<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.ExampleFragment" />
android:name
屬性特定要被實例化的 Fragment class 名稱。當 Activity 的佈局膨脹(inflate),該 Fragment 也會被實例化。新實例化的 Fragment 上會調用onInflate()
。FragmentTransaction
亦會被建立,來將 Fragment 添加至FragmentManager
。
參考資料